package com.liu.yubi.utils;

import cn.hutool.core.collection.CollUtil;
import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.support.ExcelTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
* @author lqh
* @since 2025-05-27 22:03
 * excel相关工具
*/
@Slf4j
public class ExcelUtil {
    /**
     * excel压缩为csv文件
     */
    public static String excelToCsv(MultipartFile file) {
        /**
         * //读取文件
         * list中的Map数据
         * {0=日期，1=人数}
         * {0=1号，1=10}
         * ......
         */
        List<Map<Integer,String>> list=null;
        try {
             list = EasyExcelFactory.read (file.getInputStream ())
                    .excelType (ExcelTypeEnum.XLSX)
                    .sheet ()  //读取默认工作表
                    .headRowNumber (0)//设置表头行为第一列（索引从0开始），即excel的第一行数据会被解析为表头
                    .doReadSync ();  //同步执行读取操作
        }catch (Exception e){
            log.error ("excel数据处理失败!",e);
        }
        //收集数据
        StringBuilder csvData = new StringBuilder();

        if (CollUtil.isEmpty (list)){
            return csvData.toString();
        }

        //提取表头和数据
        for (Map<Integer, String> integerStringMap : list) {
            //获取每个Map数据
            LinkedHashMap<Integer, String> eleData = (LinkedHashMap<Integer, String>) integerStringMap;
            //values:是Map中的键和值数据
            List<String> collect = eleData.values ().stream ().filter (ObjectUtils::isNotEmpty).collect (Collectors.toList ());
            //收集数据
            csvData.append (StringUtils.join (collect, ',')).append ("\r\n");
        }

        return csvData.toString();

    }
}
